Previous Page Next Page
オープンソースによる地図表示(Leaflet編)6/9
2019/4/26 by T. Fujita
4-4、インタラクティブなマーカーの設置
次に好きな位置にマーカーを設置し、CSV形式でローカル・ファイルとして保存・読込む方法を記載します。
今回は、画面上部にメニューを表示させ、そこから各種処理を選択出来るようにしました。
なお、マーカーの設置は、Leaflet内部処理系で経度が-360度から+360度の範囲で表示させるようにしています。
その主な処理内容は、次の通りです。
(1)画面上部にメニューを表示
『Leaflet_Tutrial_404.html』ソースファイルにおける赤字部分と『scroll_menu.css』から構成されており、画面上部のメニュー
部分にマウスを合わせると下側にサブメニューが表示され、選択できるようになっています。
(2)マーカーのスタイル設定
ソースファイルにおけるオレンジ色の文字部分と『Original_Style_404.css』、『Dialog_404.js』のオレンジ色の部分から構成されており、
ダイアログボックスを表示しマーカーの選択とサイズの指定、タイトル付けが可能なようにしています。
ダイアログボックスの表示には、『jquery』及び『jquery-ui』を使用しています。
なお、マーカーをクリックすることで表示される吹き出しからそのマーカーを変更出来るようにしています。
(3)移動可能なマーカーの設置
ソースファイルにおける紫色の文字部分であり、メニューから「マーカー単独設置」、「マーカー連続設置」、「マーカー連続設置終了」
を選択出来ます。 設置したマーカーは移動可能です。
(4)設置したマーカーの消去
ソースファイルにおける緑色の文字部分であり、メニューから「マーカー全消去」を選択することで、表示している全てのマーカーを消去出来ます。
また、マーカーをクリックすることで表示される吹き出しからそのマーカーを削除可能としています。
(5)CSV形式で保存と読込
ソースファイルにおける青字部分と『Dialog_404.js』の青字部分から構成されています。 データの保存先は、Windowsの標準設定ではローカルPCの「ダウンロード」フォルダです。
データの読み込みには、marghoobsuleman/ms-Dropdownを使用しています。
なお、緯度のデータは-180度~+180度の範囲に制限している他、読み込んで表示したマーカーは移動できないようにしています。
残念ながら、CSV形式での保存と読込は「Safari」には対応できていません。
以下に インタラクティブなマーカーの表示例とそのソースファイルの内容を示します。 単独で表示する場合は、
『
Leaflet_Tutrial_404.html 』をクリックして下さい。
但し、緯度・経度とも”0度”の場合にはマーカーを表示しません。
インタラクティブなマーカーの表示例
『 Leaflet_Tutrial_404.html 』のソースファイル内容
001 <!DOCTYPE html>
002 <html>
003 <head>
004 <title> Leaflet_Tutrial_404.html 2019/4/26 by T. Fujita </title>
005 <meta charset = "utf-8" />
006 <link rel = "stylesheet" href = "https://unpkg.com/leaflet@1.4.0/dist/leaflet.css" />
007 <link rel = "stylesheet" href = "https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
008 <link rel = "stylesheet" href = "./Plugins/ms-Dropdown-master/css/msdropdown/dd.css" />
009 <link rel = "stylesheet" href = "./CSS/scroll_menu.css" />
010 <link rel = "stylesheet" href = "./CSS/Original_Style_001.css" />
011
012 <style>
013 html, body {
014 width: 99%;
015 height: 98%;
016 font-size: 14px;
017 z-index:0;
018 }
019 </style>
020
021 <script src = "https://unpkg.com/leaflet@1.4.0/dist/leaflet.js"></script>
022 <script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
023 <script src = "https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
024 <script src = "./Plugins/ms-Dropdown-master/js/msdropdown/jquery.dd.js"></script>
025 <script src = "./JS/Dialog_404.js" ></script>
026 <script>
027 var Marker_LAT = new Array();
028 var Marker_LON = new Array();
029 var Marker_NAM = new Array();
030 var Marker_LNK = new Array();
031 var Marker_ICN = new Array();
032 var Marker_ID = new Array();
033 var Marker_Drag_flag = new Array();
034 var Marker_Drag_info = new Array();
035 var ClickLat = null;
036 var ClickLon = null;
037 var Marker_count = 0;
038 var Marker_ID_count = 0;
039 var SelectedID;
040 var Marker_flag = 0;
041 var Temp_shape, Temp_shape_clone;
042 var Temp, Temp_LAT, Temp_LON, Temp_NAM, Temp_LNK, Temp_ICN, Temp_ID;
043 var Temp_Drag_flag, Temp_Drag_info;
044 var Layer_404 = new Array();
045 var Layer_404_clone = new Array();
046 var Dialog_flag_001 = 0;
047 var map_404;
048
049 function init() {
050 map_404 = L.map('map_404').setView([35.0, 137.0], 6);
051 mapLink = '<a href="https://openstreetmap.org">OpenStreetMap</a>';
052 L.tileLayer(
053 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
054 attribution: 'Map data © ' + mapLink,
055 maxZoom: 18,
056 }).addTo(map_404);
057 map_404.on('click', function(e) {
058 ClickLat = e.latlng.lat;
059 ClickLon = e.latlng.lng;
060 if ( Marker_flag == 1 ) { Leaflet_Marker_401(); }
061 if ( Marker_flag == 2 ) { Leaflet_Marker_403(); }
062 });
063 }
064
065 function Leaflet_Marker_400() { // 初期設定(マーカー単独設置)
066 ClickLat = null;
067 ClickLon = null;
068 Marker_flag = 1;
069 }
070
071 function Leaflet_Marker_401() { // マーカー単独設置
072 if(Marker_flag == 1) {
073 Marker_LAT[ Marker_count ] = ClickLat;
074 Marker_LON[ Marker_count ] = ClickLon;
075 Marker_NAM[ Marker_count ] = Set_Text;
076 Marker_LNK[ Marker_count ] = Set_Link;
077 Marker_ICN[ Marker_count ] = L.icon({
078 iconUrl: Icon_Url,
079 iconSize: [Icon_W, Icon_H],
080 iconAnchor : [Icon_AW, Icon_AH],
081 popupAnchor: [Icon_PW, Icon_PH]
082 });
083 Marker_ID[ Marker_count ] = "Marker" + Marker_ID_count;
084 Marker_Drag_flag[ Marker_count ] = true;
085 Marker_Drag_info[ Marker_count ] = "マウスで移動出来ます。";
086 Temp = Marker_count;
087 Marker_setting();
088 Marker_set();
089 Layer_404[ Temp ] = Temp_shape;
090 Layer_404[ Temp ].addTo(map_404);
091 Layer_404_clone[ Temp ] = Temp_shape_clone;
092 Layer_404_clone[ Temp ].addTo(map_404);
093 Marker_count = Marker_count + 1;
094 Marker_ID_count = Marker_ID_count + 1;
095 Marker_flag = 0;
096 }
097 }
098
099 function Leaflet_Marker_402() { // 初期設定(マーカー連続設置)
100 ClickLat = null;
101 ClickLon = null;
102 Marker_flag = 2;
103 }
104
105 function Leaflet_Marker_403() { // マーカー連続設置
106 if(Marker_flag == 2) {
107 Marker_LAT[ Marker_count ] = ClickLat;
108 Marker_LON[ Marker_count ] = ClickLon;
109 Marker_NAM[ Marker_count ] = Set_Text;
110 Marker_LNK[ Marker_count ] = Set_Link;
111 Marker_ICN[ Marker_count ] = L.icon({
112 iconUrl: Icon_Url,
113 iconSize: [Icon_W, Icon_H],
114 iconAnchor : [Icon_AW, Icon_AH],
115 popupAnchor: [Icon_PW, Icon_PH]
116 });
117 Marker_ID[ Marker_count ] = "Marker" + Marker_ID_count;
118 Marker_Drag_flag[ Marker_count ] = true;
119 Marker_Drag_info[ Marker_count ] = "マウスで移動出来ます。";
120 Temp = Marker_count;
121 Marker_setting();
122 Marker_set();
123 Layer_404[ Temp ] = Temp_shape;
124 Layer_404[ Temp ].addTo(map_404);
125 Layer_404_clone[ Temp ] = Temp_shape_clone;
126 Layer_404_clone[ Temp ].addTo(map_404);
127 Marker_count = Marker_count + 1;
128 Marker_ID_count = Marker_ID_count + 1;
129 }
130 }
131
132 function Leaflet_Marker_404() { // マーカー連続設置終了
133 Marker_flag = 0;
134 }
135
136 function Leaflet_Marker_405() { // マーカー全消去
137 var j = Layer_404.length - 1;
138 for(i = 0; i <= j; i++) {
139 if(Layer_404[i] != null) {
140 map_404.removeLayer(Layer_404[i]);
141 map_404.removeLayer(Layer_404_clone[ i ]);
142 }
143 }
144 Marker_count = 0;
145 Marker_LAT = new Array();
146 Marker_LON = new Array();
147 Marker_NAM = new Array();
148 Marker_LNK = new Array();
149 Marker_ICN = new Array();
150 }
151
152 function Leaflet_Marker_406() { // マーカー保存(CSV形式)
153 for (i = 0; i <= (Marker_LON.length - 1); i++) {
154 if( !isNaN(Marker_LON[ i ]) ) {
155 while( (Marker_LON[ i ] * 1.0) < -180) {
156 Marker_LON[ i ] = (Marker_LON[ i ] * 1.0) + 360;
157 }
158 while( (Marker_LON[ i ] * 1.0) > 180) {
159 Marker_LON[ i ] = (Marker_LON[ i ] * 1.0) - 360;
160 }
161 }
162 }
163 if(Marker_LAT[ 0 ] == "LAT(deg.)") {
164 var CSV_content = [];
165 } else {
166 var CSV_content = "LAT(deg.),LONG(deg.),Name(by utf-8),Link,\r\n";
167 }
168 const aTag = document.createElement('a');
169 aTag.download = "CSV_Data.csv";
170 var bom = new Uint8Array([0xEF, 0xBB, 0xBF]);
171 Temp = Marker_LAT.length;
172 for ( i = 0; i < Temp; i++ ) {
173 if( Marker_LAT[ i ] != "" && Marker_LON[ i ] != "" ) {
174 CSV_content = CSV_content + Marker_LAT[ i ] + "," + Marker_LON[ i ] + "," + Marker_NAM[ i ] + "," + Marker_LNK[ i ] + ",\r\n";
175 }
176 }
177 var blob = new Blob([ bom, CSV_content ], { "type": "text/csv"});
178 if(window.navigator.msSaveBlob) {
179 window.navigator.msSaveBlob(blob, aTag.download); // for IE
180 } else if (window.URL && window.URL.createObjectURL) {
181 aTag.href = window.URL.createObjectURL(blob); // for FireFox
182 document.body.appendChild(aTag);
183 aTag.click();
184 document.body.removeChild(aTag);
185 } else if (window.webkitURL && window.webkitURL.createObject) {
186 aTag.href = (window.URL || window.webkitURL).createObjectURL(blob); // for Chrome
187 aTag.click();
188 } else {
189 alert("保存に失敗しました!");
190 }
191 }
192
193 function Leaflet_Marker_407() { // マーカー読込(CSV形式)
194 Dialog_002();
195 }
196
197 function Marker_setting() { // マーカー設定
198 Temp_LAT = Marker_LAT[ Temp ] * 1.0;
199 Temp_LON = Marker_LON[ Temp ] * 1.0;
200 Temp_NAM = Marker_NAM[ Temp ];
201 Temp_LNK = Marker_LNK[ Temp ];
202 Temp_ICN = Marker_ICN[ Temp ];
203 Temp_ID = Marker_ID[ Temp ];
204 Temp_Drag_flag = Marker_Drag_flag[ Temp ]
205 Temp_Drag_info = Marker_Drag_info[ Temp ]
206 Set_Link = " ";
207 if(Temp_LNK != undefined ) {
208 if( String( Temp_LNK ).length > 5 ) {
209 Set_Link = "<a href= '" + Temp_LNK + "' target='_blank'> " + Set_Text + "情報にリンク</a>";
210 }
211 }
212 }
213
214 function Marker_set() { // マーカー設置
215 if( !isNaN( Temp_LAT ) && !isNaN( Temp_LON ) ) {
216 if( (Temp_LAT !== undefined) || (Temp_LAT !== "") ) {
217 if( ((Temp_LAT * 1.0) != 0) || ((Temp_LON * 1.0) != 0) ) {
218 Temp_shape = L.marker([ Temp_LAT, Temp_LON ],
219 {icon: Temp_ICN, id: Temp_ID, draggable: Temp_Drag_flag}).bindPopup( Temp_NAM + "<BR>" + Temp_Drag_info + "<BR>" +
220 "<p> <input type='button' value='Change this Marker' class='marker-change-button'/></p>" +
221 Set_Link + "<p> <input type='button' value='Delete this Marker' class='marker-delete-button'/></p>");
222 Temp_shape.on('popupopen', onMarkerOpen ).on('dragend', Dragging);
223 if(Temp_LON >= 0) {
224 Temp_shape_clone = L.marker([ Temp_LAT, (Temp_LON - 360) ],
225 {icon: Temp_ICN, id: Temp_ID, draggable: Temp_Drag_flag}).bindPopup( Temp_NAM + "<BR>" + Temp_Drag_info + "<BR>" +
226 "<p> <input type='button' value='Change this Marker' class='marker-change-button'/></p>" +
227 Set_Link + "<p> <input type='button' value='Delete this Marker' class='marker-delete-button'/></p>");
228 Temp_shape_clone.on('popupopen', onMarkerOpen ).on('dragend', Dragging);
229 } else {
230 Temp_shape_clone = L.marker([ Temp_LAT, (Temp_LON + 360) ],
231 {icon: Temp_ICN, id: Temp_ID, draggable: Temp_Drag_flag}).bindPopup( Temp_NAM + "<BR>" + Temp_Drag_info + "<BR>" +
232 "<p> <input type='button' value='Change this Marker' class='marker-change-button'/></p>" +
233 Set_Link + "<p> <input type='button' value='Delete this Marker' class='marker-delete-button'/></p>");
234 Temp_shape_clone.on('popupopen', onMarkerOpen ).on('dragend', Dragging);
235 }
236 }
237 }
238 }
239 }
240
241 function onMarkerOpen() { // マーカーをクリックした時に表示する削除ボタンと変更ボタン
242 var tempMarker = this;
243 SelectedID = tempMarker.options.id;
244 $(".marker-delete-button:visible").click(function () {
245 Marker_DEL(tempMarker);
246 });
247 $(".marker-change-button:visible").click(function () {
248 Dialog_001();
249 });
250 }
251
252 function Change_Marker() { // 変更ボタン押下時の処理
253 for(i = 0; i <= Marker_count; i++) {
254 if(SelectedID == Marker_ID[ i ] ) {
255 Marker_NAM[ i ] = Set_Text;
256 Marker_ICN[ i ] = L.icon({
257 iconUrl: Icon_Url,
258 iconSize: [Icon_W, Icon_H],
259 iconAnchor : [Icon_AW, Icon_AH],
260 popupAnchor: [Icon_PW, Icon_PH]
261 });
22 }
253 }
254 Marker_Refresh();
255 }
256
257 function Marker_DEL(tempMarker) { // 削除ボタン押下時の処理
258 var k = 0;
259 Marker_flag = 0;
270 Marker_LAT[ Marker_count + 1 ] = "";
271 Marker_LON[ Marker_count + 1 ] = "";
272 Marker_NAM[ Marker_count + 1 ] = "";
273 Marker_LNK[ Marker_count + 1 ] = "";
274 Marker_ICN[ Marker_count + 1 ] = "";
275 Marker_ID[ Marker_count + 1 ] = "";
276 SelectedID = tempMarker.options.id;
277 for(i = 0; i <= Marker_count; i++) {
278 if(SelectedID == Marker_ID[ i ] ) {
279 for(k = i; k <= Marker_count; k++) {
270 Marker_LAT[ k ] = Marker_LAT[ k + 1 ];
271 Marker_LON[ k ] = Marker_LON[ k + 1 ];
272 Marker_NAM[ k ] = Marker_NAM[ k + 1 ];
273 Marker_LNK[ k ] = Marker_LNK[ k + 1 ];
274 Marker_ICN[ k ] = Marker_ICN[ k + 1 ];
285 Marker_ID[ k ] = Marker_ID[ k + 1 ];
286 Marker_Drag_flag[ k ] = Marker_Drag_flag[ k + 1 ];
287 Marker_Drag_info[ k ] = Marker_Drag_info[ k + 1 ];
288 }
289 }
290 }
291 SelectedID = null;
292 Marker_count = Marker_count - 1;
293 Marker_Refresh();
294 }
295
296 function Marker_Refresh() { // マーカー再表示
297 var j = Layer_404.length - 1;
298 for(i = 0; i <= j; i++) {
299 if(Layer_404[ i ] != null) {
300 map_404.removeLayer(Layer_404[ i ]);
301 map_404.removeLayer(Layer_404_clone[ i ]);
302 }
303 }
304 for (i = 0; i <= Marker_count - 1; i++)
305 {
306 Temp = i;
307 Marker_setting();
308 Marker_set();
309 Layer_404[ Temp ] = Temp_shape;
310 Layer_404[ Temp ].addTo(map_404);
311 Layer_404_clone[ Temp ] = Temp_shape_clone;
312 Layer_404_clone[ Temp ].addTo(map_404);
313 }
314 }
315
316 function Dragging() { // マーカーをドラッグ時の位置取得
317 ClickLat = this._latlng.lat;
318 ClickLon = this._latlng.lng;
319 SelectedID = this.options.id;
320 for(i = 0; i <= Marker_count; i++) {
321 if(SelectedID == Marker_ID[ i ] ) {
322 Marker_LAT[ i ] = ClickLat;
323 Marker_LON[ i ] = ClickLon;
324 }
325 }
326 Marker_Refresh();
327 SelectedID = null;
328 }
329
330 function CSV_Markers() { // CSVデータを表示
331 for (i = 0; i <= (Data_CSV.length - 1); i++) {
332 if((Data_CSV[i][0] * 1.0) > 90) {
333 Data_CSV[i][0] = 90;
334 }
335 if((Data_CSV[i][0] * 1.0) < -90) {
336 Data_CSV[i][0] = -90;
337 }
338 while( (Data_CSV[i][1] * 1.0) < -180) {
339 Data_CSV[i][1] = Data_CSV[i][1] * 1.0 + 360;
340 }
341 while( (Data_CSV[i][1] * 1.0) > 180) {
342 Data_CSV[i][1] = Data_CSV[i][1] * 1.0 - 360;
343 }
344 }
345 for (i = 0; i <= (Data_CSV.length - 1); i++) {
346 Marker_LAT[ Marker_count ] = Data_CSV[i][0];
347 Marker_LON[ Marker_count ] = Data_CSV[i][1];
348 Marker_NAM[ Marker_count ] = Data_CSV[i][2];
349 Marker_LNK[ Marker_count ] = Data_CSV[i][3];
350 Marker_ICN[ Marker_count ] = L.icon({
351 iconUrl: Icon_Url,
352 iconSize: [Icon_W, Icon_H],
353 iconAnchor : [Icon_AW, Icon_AH],
354 popupAnchor: [Icon_PW, Icon_PH]
355 });
356 Marker_ID[ Marker_count ] = "Marker" + Marker_ID_count;
357 Marker_Drag_flag[ Marker_count ] = false;
358 Marker_Drag_info[ Marker_count ] = "移動出来ません。";
359 if( Data_CSV[i][0] != "" ) {
360 if( !isNaN( Data_CSV[i][0] ) ) {
361 Temp = Marker_count;
362 Marker_setting();
363 Marker_set();
364 Layer_404[ Temp ] = Temp_shape;
365 Layer_404[ Temp ].addTo(map_404);
366 Layer_404_clone[ Temp ] = Temp_shape_clone;
367 Layer_404_clone[ Temp ].addTo(map_404);
368 }
369 }
370 Marker_count = Marker_count + 1;
371 Marker_ID_count = Marker_ID_count + 1;
372 }
373 }
374
375 </script>
376 </head>
377 <body onload="init()">
378 <nav id="menu-wrap" style="z-index: 1000;">
379 <ul id="menu" style="width: 98%;">
380 <li><a href="#">マーカー設定</a>
381 <ul>
382 <li><a href="#" onclick = "Dialog_001()">マーカーのスタイルを設定</a></li>
383 <li><a href="#" onclick = "Leaflet_Marker_400()">マーカー単独設置 </a></li>
384 <li><a href="#" onclick = "Leaflet_Marker_402()">マーカー連続設置 </a></li>
385 <li><a href="#" onclick = "Leaflet_Marker_404()">マーカー連続設置終了 </a></li>
386 <li><a href="#" onclick = "Leaflet_Marker_405()">マーカー全消去 </a></li>
387 <li><a href="#" onclick = "Leaflet_Marker_406()">マーカー保存(CSV形式) </a></li>
388 <li><a href="#" onclick = "Leaflet_Marker_407()">マーカー読込(CSV形式) </a></li>
389 </ul>
390 </li>
391 </ul>
392 </nav>
393 <div id="map_Layer">
394 <div id="map_404" style="width: 100%; height: 400px; border: solid 1px"></div>
395 ここで使用しているアイコン素材は、<A HREF = "http://flat-icon-design.com/" target="_blank"> FLAT ICON DESIGN </A>および
396 <A HREF = "http://icooon-mono.com/" target="_blank"> ICOON MONO </A>から取得しており、<BR>
397 これらアイコン素材データの著作権は TopeconHeroes が保持しています。
398 </div>
399 </body>
400 </html>
『 scroll_menu.css 』は、画面上部にメニューを表示するためのスタイルシートです。
『 scroll_menu.css 』のソースファイル内容
001 #menu, #menu ul {
002 margin: 0;
003 padding: 0;
004 list-style: none;
005 position: absolute;
006 }
007
008 #menu {
009 width: 100%;
010 height: 30px;
011 margin: 0px auto;
012 border: 1px solid #444;
013 background-color: #111;
014 background-image: linear-gradient(#444, #111);
015 border-top-left-radius: 6px;
016 border-top-right-radius: 6px;
017 border-bottom-left-radius: 1px;
018 border-bottom-right-radius: 1px;
019 box-shadow: 0 1px 1px #777, 0 1px 0 #666 inset;
020 }
021
022 #menu:before,
023
024 #menu:after {
025 content: "";
026 display: table;
027 clear: both;
028 }
029
030 #menu li {
031 float: left;
032 border: 1px solid #fff;
033 box-shadow: 1px 0 0 #444;
034 position: relative;
035 border-top-right-radius: 6px;
036 border-top-left-radius: 6px;
037 }
038
039 #menu a {
040 float: left;
041 padding: 5px 10px;
042 color: #FAFAFA;
043 text-transform: uppercase;
044 font: 12px Arial, Helvetica;
045 text-decoration: none;
046 text-shadow: 0 1px 0 #000;
047 }
048
049 #menu li:hover > a {
050 color: #BA0000;
051 }
052
053 #menu ul {
054 margin: 10px 0 0 0;
055 opacity: 0;
056 visibility: hidden;
057 position: absolute;
058 top: 24px;
059 left: 0;
060 z-index: 2000;
061 background: #444;
062 background: linear-gradient(#444, #111);
063 box-shadow: 0 -1px 0 rgba(255,255,255,.3);
064 border-radius: 3px;
065 transition: all .2s ease-in-out;
066 }
067
068 #menu li:hover > ul {
069 opacity: 1;
070 visibility: visible;
071 margin: 0;
072 }
073
074 #menu ul ul {
075 top: 0;
076 left: 200px;
077 margin: 0 0 0 8px;
078 box-shadow: -1px 0 0 rgba(255,255,255,.3);
079 }
080
081 #menu ul li {
082 float: none;
083 display: block;
084 border: 0;
085 box-shadow: 0 1px 0 #111, 0 2px 0 #666;
086 }
087
088 #menu ul li:last-child {
089 box-shadow: none;
090 }
091
092 #menu ul a {
093 padding: 3px;
094 width: 200px;
095 display: block;
096 white-space: nowrap;
097 float: none;
098 text-transform: none;
099 }
100
101 #menu ul a:hover {
102 color: #FAFAFA;
103 background-color: #BA0000;
104 background-image: linear-gradient(#BA0000, #111);
105 }
106
107 #menu ul li:last-child > a {
108 border-radius: 0 0 3px 3px;
109 }
110
111 #scroll {
112 max-width: 210px;
113 max-height: 300px;
114 overflow-y: auto;
115 overflow-x: hidden;
116 }
117
118 #myColor {
119 border: 1px solid #FFFFFF;
120 position: absolute;
121 top: 2px;
122 }
123
124 #txtInfo {
125 position: absolute;
126 left: 546px;
127 }
128
129 #menu-wrap{
130 width: 100%;
131 }
132
133 #map_Layer {
134 width: 100%;
135 height: 93%;
136 position: relative;
137 top:30px;
138 z-index: 0;
13940 }
140
141 .leaflet-container {
142 background: #fff;
143 outline: 0;
144 }
『 Original_Style_404.css 』は、ダイアログボックス内を表示するためのスタイルシートです。
『 Original_Style_404.css 』のソースファイル内容
001 .leaflet-container {
002 background: #fff;
003 outline: 0;
004 }
005 .ui-widget {
006 font-family: Arial,Verdana,sans-serif;
007 font-size: 0.8em;
008 }
009 .ui-slider-range {
010 background: #808080;
011 }
012 #console {
013 height: 136px;
014 overflow-y: scroll;
015 color: white;
016 background-color: black;
017 }
『 Dialog_404.js 』は、マーカーのスタイルを選択するダイアログボックス(オレンジ色の部分)と
CSVファイルを読み込みマーカーを表示させるダイアログボックス(青文字の部分)のJavascriptファイルです。
ダイアログボックス内で選択できるマーカーは、19行目~78行目で60個指定しています。 これを変更することで任意のマーカーを任意の個数使用できます。
ここでは、選択時に表示するマーカーのサイズを64×64ドットに統一しています。
『 Dialog_404.js 』のソースファイル内容
001 var Set_Text = "";
002 var Set_Link = " ";
003 var Icon_Url = "../ICONS/BW_Icon/BW_Icons_64/icon_000200_64.png";
004 var Icon_W = 24;
005 var Icon_H = 24;
006 var Icon_AW = Math.round(Icon_W / 2);
007 var Icon_AH = Math.round(Icon_H / 2);
008 var Icon_PW = 0;
009 var Icon_PH = Math.round(Icon_H / 2) * -1;
010 var Max_M_Size = 64;
011 var Min_M_Size = 8;
012 var Data_CSV = new Array();
013
014 $(document).ready( function() {
015 $("body").append('<div id="dialog_001" style="z-index: 2000;"><p><form name="Form_001"> Title: '+
016 '<input type="text" style="width: 230px;" name="txt_mk" value=""></form><BR>'+
017 '<div>Marker Select:<BR>'+
018 '<select id="Marker_Samples" name="Marker_Samples" style="width:150px;">'+
019 '<option value="1" title="../ICONS/BW_Icon/BW_Icons_64/icon_000200_64.png">001</option>'+
020 '<option value="2" title="../ICONS/BW_Icon/BW_Icons_64/icon_127890_64.png">002</option>'+
021 '<option value="3" title="../ICONS/BW_Icon/BW_Icons_64/icon_114880_64.png">003</option>'+
022 '<option value="4" title="../ICONS/BW_Icon/BW_Icons_64/icon_109890_64.png">004</option>'+
023 '<option value="5" title="../ICONS/BW_Icon/BW_Icons_64/icon_001050_64.png">005</option>'+
024 '<option value="6" title="../ICONS/BW_Icon/BW_Icons_64/icon_119170_64.png">006</option>'+
025 '<option value="7" title="../ICONS/BW_Icon/BW_Icons_64/icon_122590_64.png">007</option>'+
026 '<option value="8" title="../ICONS/BW_Icon/BW_Icons_64/icon_000220_64.png">008</option>'+
027 '<option value="9" title="../ICONS/BW_Icon/BW_Icons_64/icon_133000_64.png">009</option>'+
028 '<option value="10" title="../ICONS/BW_Icon/BW_Icons_64/icon_115740_64.png">010</option>'+
029 '<option value="11" title="../ICONS/BW_Icon/BW_Icons_64/icon_115710_64.png">011</option>'+
030 '<option value="12" title="../ICONS/BW_Icon/BW_Icons_64/icon_115750_64.png">012</option>'+
031 '<option value="13" title="../ICONS/BW_Icon/BW_Icons_64/icon_115720_64.png">013</option>'+
032 '<option value="14" title="../ICONS/BW_Icon/BW_Icons_64/icon_147060_64.png">014</option>'+
033 '<option value="15" title="../ICONS/BW_Icon/BW_Icons_64/icon_127900_64.png">015</option>'+
034 '<option value="16" title="../ICONS/BW_Icon/BW_Icons_64/icon_109850_64.png">016</option>'+
035 '<option value="17" title="../ICONS/BW_Icon/BW_Icons_64/icon_111050_64.png">017</option>'+
036 '<option value="18" title="../ICONS/BW_Icon/BW_Icons_64/icon_111060_64.png">018</option>'+
037 '<option value="19" title="../ICONS/BW_Icon/BW_Icons_64/icon_111520_64.png">019</option>'+
038 '<option value="20" title="../ICONS/BW_Icon/BW_Icons_64/icon_127100_64.png">020</option>'+
039 '<option value="21" title="../ICONS/BW_Icon/BW_Icons_64/icon_127110_64.png">021</option>'+
040 '<option value="22" title="../ICONS/BW_Icon/BW_Icons_64/icon_127120_64.png">022</option>'+
041 '<option value="23" title="../ICONS/BW_Icon/BW_Icons_64/icon_127130_64.png">023</option>'+
042 '<option value="24" title="../ICONS/BW_Icon/BW_Icons_64/icon_127140_64.png">024</option>'+
043 '<option value="25" title="../ICONS/BW_Icon/BW_Icons_64/icon_127150_64.png">025</option>'+
044 '<option value="26" title="../ICONS/BW_Icon/BW_Icons_64/icon_127160_64.png">026</option>'+
045 '<option value="27" title="../ICONS/BW_Icon/BW_Icons_64/icon_001720_64.png">027</option>'+
046 '<option value="28" title="../ICONS/BW_Icon/BW_Icons_64/icon_100590_64.png">028</option>'+
047 '<option value="29" title="../ICONS/BW_Icon/BW_Icons_64/icon_100600_64.png">029</option>'+
048 '<option value="30" title="../ICONS/BW_Icon/BW_Icons_64/icon_102040_64.png">030</option>'+
049 '<option value="31" title="../ICONS/BW_Icon/BW_Icons_64/icon_104940_64.png">031</option>'+
050 '<option value="32" title="../ICONS/BW_Icon/BW_Icons_64/icon_107470_64.png">032</option>'+
051 '<option value="33" title="../ICONS/BW_Icon/BW_Icons_64/icon_108510_64.png">033</option>'+
052 '<option value="34" title="../ICONS/BW_Icon/BW_Icons_64/icon_108730_64.png">034</option>'+
053 '<option value="35" title="../ICONS/BW_Icon/BW_Icons_64/icon_111960_64.png">035</option>'+
054 '<option value="36" title="../ICONS/BW_Icon/BW_Icons_64/icon_111970_64.png">036</option>'+
055 '<option value="37" title="../ICONS/BW_Icon/BW_Icons_64/icon_112440_64.png">037</option>'+
056 '<option value="38" title="../ICONS/BW_Icon/BW_Icons_64/icon_112450_64.png">038</option>'+
057 '<option value="39" title="../ICONS/BW_Icon/BW_Icons_64/icon_113000_64.png">039</option>'+
058 '<option value="40" title="../ICONS/BW_Icon/BW_Icons_64/icon_113010_64.png">040</option>'+
059 '<option value="41" title="../ICONS/BW_Icon/BW_Icons_64/icon_114520_64.png">041</option>'+
060 '<option value="42" title="../ICONS/BW_Icon/BW_Icons_64/icon_114530_64.png">042</option>'+
061 '<option value="43" title="../ICONS/BW_Icon/BW_Icons_64/icon_114770_64.png">043</option>'+
062 '<option value="44" title="../ICONS/BW_Icon/BW_Icons_64/icon_114780_64.png">044</option>'+
063 '<option value="45" title="../ICONS/BW_Icon/BW_Icons_64/icon_128020_64.png">045</option>'+
064 '<option value="46" title="../ICONS/BW_Icon/BW_Icons_64/icon_124660_64.png">046</option>'+
065 '<option value="47" title="../ICONS/BW_Icon/BW_Icons_64/icon_127930_64.png">047</option>'+
066 '<option value="48" title="../ICONS/Flat_Icons/s64_f_business_72_0nbg.png">048</option>'+
067 '<option value="49" title="../ICONS/Flat_Icons/s64_f_business_76_0nbg.png">049</option>'+
068 '<option value="50" title="../ICONS/Flat_Icons/s64_f_object_6_2nbg.png">050</option>'+
069 '<option value="51" title="../ICONS/Flat_Icons/s64_f_object_7_2nbg.png">051</option>'+
070 '<option value="52" title="../ICONS/Flat_Icons/s64_f_object_24_1nbg.png">052</option>'+
071 '<option value="53" title="../ICONS/Flat_Icons/s64_f_object_25_0nbg.png">053</option>'+
072 '<option value="54" title="../ICONS/Flat_Icons/s64_f_object_27_2nbg.png">054</option>'+
073 '<option value="55" title="../ICONS/Flat_Icons/s64_f_object_155_1nbg.png">055</option>'+
074 '<option value="56" title="../ICONS/Flat_Icons/s64_f_object_164_2nbg.png">056</option>'+
075 '<option value="57" title="../ICONS/Flat_Icons/s64_f_object_167_0nbg.png">057</option>'+
076 '<option value="58" title="../ICONS/Flat_Icons/s64_f_object_173_0nbg.png">058</option>'+
077 '<option value="59" title="../ICONS/Flat_Icons/s64_f_object_115_0nbg.png">059</option>'+
078 '<option value="60" title="../ICONS/Flat_Icons/s64_f_object_116_1nbg.png">060</option>'+
079 '</select></div><BR>'+
080 '<div><tr><td><BR><div id="num_001"></div><div id="slider_001"></div>'+
081 '<BR><BR><div id="Selected_Icon">Selected Icon: <img src=""></div>'+
082 '</td></tr></div><BR>(注) ここで使用しているアイコン素材は、<A HREF = "http://flat-icon-design.com/" target="_blank"> FLAT ICON DESIGN </A>および' +
083 '<A HREF = "http://icooon-mono.com/" target="_blank"> ICOON MONO </A>から取得しており、<BR>' +
084 'これらアイコン素材データの著作権は TopeconHeroes が保持しています。</p><div>');
085
086 $('#Selected_Icon img').attr('src', Icon_Url);
087
088 $('#dialog_001').dialog({
089 autoOpen: false,
090 title: 'Please Set the Icon Style.',
091 height: 450,
092 width: 300,
093 closeOnEscape: true,
094 modal: true,
095 buttons: {
096 "設定": function(){
097 Set_Text = document.Form_001.txt_mk.value;
098 var Temp = Marker_Samples.options[Marker_Samples.selectedIndex].title;
099 Icon_Url = Temp;
100 Icon_AW = Math.round(Icon_W / 2);
101 Icon_AH = Math.round(Icon_H / 2);
102 Icon_PW = 0;
103 Icon_PH = Math.round(Icon_H / 2) * -1;
104 Change_Marker();
105 $(this).dialog('close');
106 }
107 }
108 });
109
110 $("body").append('<div id="dialog_002" style="z-index: 2000;"><p><form name="Form_002">'+
111 'Title: <input type="text" style="width: 230px;" name="txt_dat" value=""></form></p><HR>'+
112 '<p> File Select:'+
113 '<form name="subinput">'+
114 '<center>CSVファイルを指定してください。<BR><BR>'+
115 ' <TD><input type="file" name="select" id="select_002" value=""></TD>'+
116 ' <BR><BR>'+
117 '</center></p></div>');
118
119 $('#dialog_002').dialog({
120 autoOpen: false,
121 title: 'CSVファイル選択',
122 height: 400,
123 width: 300,
124 closeOnEscape: true,
125 modal: true,
126 show: "fade",
127 hide: "fade",
128 buttons: {
129 "Select the Marker": function(){
130 Dialog_001();
131 },
132 "Set Markers": function(){
133 CSV_Data();
134 CSV_Markers();
135 },
136 "Close": function(){
137 $(this).dialog('close');
138 }
139 }
140 });
141
142
143 $('#slider_001').slider( {
144 orientation: 'horizontal',
145 range: 'min',
146 max: 255,
147 value: 127,
148 slide: refreshSwatch,
149 change: refreshSwatch
150 } );
151 $( '#slider_001' ).slider( 'value', 96 );
152 $( '#Marker_Samples' ).msDropDown({
153 visibleRows:4,
154 on:{change:function(data, ui) {
155 Icon_Url = Marker_Samples.options[Marker_Samples.selectedIndex].title;
156 $('#Selected_Icon img').attr('src', Icon_Url);
157 }}
158 });
159 });
160
161
162 function Dialog_001() {
163 document.Form_001.txt_mk.value = "";
164 $('#dialog_001').dialog('open');
165 }
166
167 function Dialog_002() {
168 CSV_Data();
169 document.Form_002.txt_dat.value = "";
170 $('#dialog_002').dialog('open');
171 }
172
173
174 function refreshSwatch() {
175 Icon_W = Math.round($('#slider_001').slider('value') / 255 * Max_M_Size);
176 if (Icon_W <= Min_M_Size) { Icon_W = Min_M_Size; }
177 Icon_H = Icon_W;
178 $( '#num_001' ).html( 'Marker Size: ' + Icon_W );
179 $( '#Selected_Icon img' ).css( { width: Icon_W, height: Icon_H } );
180 }
181
182 function CSV_Data() {
183 if(window.File) {
184 var select = document.getElementById('select_002');
185 select.addEventListener('change', function(e) {
186 var fileData = e.target.files[0];
187
188 Data_CSV = [];
189 var reader = new FileReader();
190 reader.onerror = function() {
191 alert('ファイル読み込みに失敗しました。');
192 }
193 reader.onload = function() {
194 var lineArr = reader.result.split("\r\n");
195 for (var i = 0; i < lineArr.length; i++) {
196 Data_CSV[i] = lineArr[i].split(",");
197 }
198 }
199 reader.readAsText(fileData);
200 }, false);
201 }
202 }
ここで使用するCSVファイルには、緯度、経度、名称、リンク先の4項目を記載します。(緯度、経度は必須です)
そのフォーマット例(MS-EXCELでの表示)を次に示します。 緯度・経度は、「3-4、マウス位置表示」の項で表示される数値を使用する事が出来ます。
なお、CSVファイル内に全角文字を使用する場合には、UTF8で保存する必要があります。(シフトJISで保存すると文字化けしますので、ご注意ください)
Previous Page Next Page